package com.stars.module.code.controller;

import com.stars.base.entity.CommonDTO;
import com.stars.base.entity.Result;
import com.stars.module.code.entity.StarCode;
import com.stars.module.code.service.CodeService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/10/29 08:29
 * @description : 数据代码控制器
 */
@RestController
@RequestMapping("/starCode")
public class StarCodeController {

    private final CodeService codeService;

    public StarCodeController(CodeService codeService) {
        this.codeService = codeService;
    }

    /**
     * 加载代码管理树
     * @author : Rocks
     * @date :  2023/2/25 21:50
     * @return Result
     */
    @RequestMapping("/loadTree")
    public Result loadTree(){
        return Result.success(codeService.loadCodeTree());
    }

    /**
     * 根据FID加载当前节点全部子节点
     * @author : Rocks
     * @date :  2023/2/25 21:51
     * @param dto 查询条件
     * @return Result
     */
    @RequestMapping("/loadCodeListByFid")
    public Result loadCodeListByFid(@RequestBody CommonDTO dto) {
        return Result.success(codeService.loadCodeListByFid(dto));
    }

    /**
     * 根据ID获取代码管理数据
     * @author : Rocks
     * @date :  2023/2/25 21:52
     * @param id 要查询代码主键
     * @return Result
     */
    @RequestMapping("/loadCodeById")
    public Result loadCodeById(String id) {
        return Result.success(codeService.loadCodeById(id));
    }

    /**
     * 根据代码ID和代码类型删除代码
     * @author : Rocks
     * @date :  2023/2/25 21:53
     * @param codeId 代码主键
     * @param type 代码类型 1-文件夹 2-代码值
     * @return Result
     */
    @PostMapping("/removeCode")
    public Result removeCode(String codeId,String type){
        return codeService.removeCode(codeId, type);
    }

    /**
     * 保存代码值
     * @author : Rocks
     * @date :  2023/2/25 21:55
     * @param starCode 代码值对象
     * @return Result
     */
    @PostMapping("/saveCode")
    public Result saveCode(@RequestBody StarCode starCode){
        return codeService.saveOrUpdateCode(starCode);
    }

    /**
     * 根据父节点ID获取当前节点下子节点最大排序
     * @author : Rocks
     * @date :  2023/2/25 21:55
     * @param fid 父节点ID
     * @return Result
     */
    @RequestMapping("/getMaxIndex")
    public Result getMaxIndex (String fid) {
        return Result.success(codeService.getMaxIndex(fid));
    }

    /**
     * 根据节点的FID获取字节的代码
     * @author : Rocks
     * @date :  2023/2/25 21:55
     * @param fid 父节点ID
     * @return Result [{label:'显示值',value:'代码值'}]
     */
    @RequestMapping("/getCode")
    public Result getCode(String fid) {
        return Result.success(codeService.getCode(fid));
    }

    /**
     * 根据父节点ID以树的形式获取当前节点以及子节点信息
     * @author : Rocks
     * @date :  2023/2/25 21:57
     * @param fids 父节点ID，多个ID用逗号分割
     * @return Result
     */
    @RequestMapping("/getCodeByTree")
    public Result getCodeByTree(String fids) {
        return Result.success(codeService.getCodeByTree(fids));
    }

    /**
     * 获取数据代码目录树
     * @author : Rocks
     * @date :  2023/7/22 19:52
     * @return Result
     */
    @RequestMapping("/getCodeGroupTree")
    public Result getCodeGroupTree () {
        return Result.success(codeService.getCodeGroupTree());
    }
}
